package mx.ipn.escom.redes.gestionaraplicacion.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import mx.ipn.escom.redes.equipo.model.AplicacionSoftware;
import mx.ipn.escom.redes.gestionaraplicacion.business.AplicacionBs;
import mx.ipn.escom.redes.util.Constantes;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.Validations;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;

@Namespace("/aplicacion")
@Results({
		@Result(name = "success", type = "redirectAction", params = {
				"actionName", "gestionar-aplicacion" }),
		@Result(name = "equipo", type = "redirectAction", params = {
				"actionName", "gestionar-equipo/new", "namespace", "/equipo" }) })
public class GestionarAplicacionCtrl extends ActionSupport implements
		ModelDriven<AplicacionSoftware> {

	private static final long serialVersionUID = 1L;

	private Integer idSel;

	private AplicacionSoftware model;

	private AplicacionBs aplicacionBs;

	private String nombre;

	private List<AplicacionSoftware> listaAplicacionSoftware;

	public String index() {
		listaAplicacionSoftware = aplicacionBs.findAll();
		if (listaAplicacionSoftware.isEmpty()
				|| listaAplicacionSoftware == null) {
			addActionMessage(getText("SIN_REGISTROS_SOFTWARE"));
		}

		return "index";
	}

	public String editNew() {
		HttpServletRequest request = ServletActionContext.getRequest();
		String isCreatingEquipo = request.getParameter("isCreatingEquipo");
		if (isCreatingEquipo != null)
			Constantes.isCreatingEquipo = Boolean
					.parseBoolean(isCreatingEquipo);
		else
			Constantes.isCreatingEquipo = false;
		System.out.println(Constantes.isCreatingEquipo
				+ "----------------------------------XDD");
		return "editNew";
	}

	@Validations(requiredStrings = {
			@RequiredStringValidator(fieldName = "model.nombre", type = ValidatorType.FIELD, key = "APLICACION_NOMBRE_REQUERIDO", trim = true),
			@RequiredStringValidator(fieldName = "model.codeVersion", type = ValidatorType.FIELD, key = "APLICACION_CODE_VERSION_REQUERIDO", trim = true),
			@RequiredStringValidator(fieldName = "model.lenguaje", type = ValidatorType.FIELD, key = "APLICACION_LENGUAJE_REQUERIDO", trim = true),
			@RequiredStringValidator(fieldName = "model.compilerVersion", type = ValidatorType.FIELD, key = "APLICACION_COMPILE_VERSION_REQUERIDO", trim = true) })
	public String create() {
		if (!aplicacionBs.validarNombre(model.getNombre())) {
			addActionMessage(getText("APLICACION_REPETIDA"));
		} else {
			aplicacionBs.guardar(model);
			addActionMessage(getText("REGISTRO_APLICACION_EXITOSO"));
		}
		if (Constantes.isCreatingEquipo)
			return "equipo";
		else
			return index();
	}

	public String edit() {
		return "edit";
	}

	@Validations(requiredStrings = {
			@RequiredStringValidator(fieldName = "model.nombre", type = ValidatorType.FIELD, key = "APLICACION_NOMBRE_REQUERIDO", trim = true),
			@RequiredStringValidator(fieldName = "model.codeVersion", type = ValidatorType.FIELD, key = "APLICACION_CODE_VERSION_REQUERIDO", trim = true),
			@RequiredStringValidator(fieldName = "model.lenguaje", type = ValidatorType.FIELD, key = "APLICACION_LENGUAJE_REQUERIDO", trim = true),
			@RequiredStringValidator(fieldName = "model.compilerVersion", type = ValidatorType.FIELD, key = "APLICACION_COMPILE_VERSION_REQUERIDO", trim = true) })
	public String update() {
		if (!model.getNombre().equals(getNombre())) {
			if (!aplicacionBs.validarNombre(model.getNombre())) {
				addActionMessage(getText("APLICACION_REPETIDA"));
			} else {
				aplicacionBs.modificar(model);
				addActionMessage(getText("MODIFICACION_APLICACION_EXITOSO"));
			}
		} else {
			aplicacionBs.modificar(model);
			addActionMessage(getText("MODIFICACION_APLICACION_EXITOSO"));
		}

		return index();
	}

	public String deleteConfirm() {
		return "deleteConfirm";
	}

	public String destroy() {
		aplicacionBs.eliminar(model);
		addActionMessage(getText("ELIMINACION_APLICACION_EXITOSO"));
		return index();
	}

	/**
	 * @return the idSel
	 */
	public Integer getIdSel() {
		return idSel;
	}

	/**
	 * @param idSel
	 *            the idSel to set
	 */
	public void setIdSel(Integer idSel) {
		this.idSel = idSel;
		if (this.idSel != null) {
			model = aplicacionBs.findById(idSel);
		}
		if (model.getNombre() != null) {
			setNombre(model.getNombre());
		} else {
			setNombre("");
		}
	}

	/**
	 * @return the aplicacionBs
	 */
	public AplicacionBs getAplicacionBs() {
		return aplicacionBs;
	}

	/**
	 * @param aplicacionBs
	 *            the aplicacionBs to set
	 */
	public void setAplicacionBs(AplicacionBs aplicacionBs) {
		this.aplicacionBs = aplicacionBs;
	}

	public AplicacionSoftware getModel() {
		if (model == null) {
			model = new AplicacionSoftware();
		}
		return model;
	}

	/**
	 * @param model
	 *            the model to set
	 */
	public void setModel(AplicacionSoftware model) {
		this.model = model;
	}

	/**
	 * @return the listaAplicacionSoftware
	 */
	public List<AplicacionSoftware> getListaAplicacionSoftware() {
		return listaAplicacionSoftware;
	}

	/**
	 * @param listaAplicacionSoftware
	 *            the listaAplicacionSoftware to set
	 */
	public void setListaAplicacionSoftware(
			List<AplicacionSoftware> listaAplicacionSoftware) {
		this.listaAplicacionSoftware = listaAplicacionSoftware;
	}

	/**
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * @param nombre
	 *            the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

}
